import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'

Vue.use(ElementUI)

Vue.config.productionTip = false

// 添加Axios请求拦截器：除认证接口外统一携带Authorization
axios.interceptors.request.use(config => {
  try {
    const isAuthApi = typeof config.url === 'string' && config.url.startsWith('/api/auth/')
    if (!isAuthApi) {
      const token = localStorage.getItem('token')
      if (token) {
        // 统一以 Bearer 形式设置
        config.headers = config.headers || {}
        config.headers.Authorization = token
        // 同步默认头（兼容项目中可能直接读 defaults 的地方）
        axios.defaults.headers.common.Authorization = config.headers.Authorization
      }
    } else {
      // 确保登录/注册请求不携带旧的鉴权头
      if (config.headers && config.headers.Authorization) delete config.headers.Authorization
    }
  } catch (e) { /* no-op */ }
  return config
})

// 添加Axios响应拦截器处理401错误
axios.interceptors.response.use(
  response => response, // 正常响应直接返回
  error => {
    // 处理401未授权错误
    if (error.response && error.response.status === 401) {
      // 清除本地存储的token
      localStorage.removeItem('token')

      // 显示错误提示
      Vue.prototype.$message.error('登录已过期，请重新登录')

      // 跳转到登录页，并记录当前页面作为登录后跳转回来的地址
      router.replace({
        path: '/login',
        query: { redirect: router.currentRoute.fullPath }
      })
    }
    return Promise.reject(error)
  }
)

// 路由守卫：强制登录
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  // 登录页和注册页不需要验证
  if (to.path === '/login' || to.path === '/register') {
    return next()
  }
  // 没有token则跳转到登录页
  if (!token) {
    return next('/login')
  }
  // 有token则直接放行（请求头由拦截器统一处理）
  next()
})

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
